<?php
// -------------------------------------------------------------------------------------------------------------------------
//                                fonctions de gestion de la bdd mrbs (projet Réservations M2L)
//                       Auteur : JM Cartron                       Dernière modification : 18/09/2014
// -------------------------------------------------------------------------------------------------------------------------

// liste des fonctions de ce fichier (dans l'ordre d'apparition dans le fichier) :

// estIdentifie                  : teste si $nomUser et $mdpUser identifient bien un utilisateur de niveau 1 (utilisateur) ou 2 (administrateur)
// estUtilisateurIdentifie       : teste si $nomUser et $mdpUser identifient bien un utilisateur de niveau 1 (utilisateur) ou 2 (administrateur)
// estAdministrateurIdentifie    : teste si $nomUser et $mdpUser identifient bien un utilisateur de niveau 2 (administrateur)
// genererUnDigicode             : génération aléatoire d'un digicode de 6 caractères hexadécimaux
// creerLesDigicodesManquants    : mise à jour de la table mrbs_entry_digicode (si besoin) pour créer les digicodes manquants
// listeReservations             : fournit la liste des réservations à venir d'un utilisateur ($nomUser)
// existeReservation             : fournit true si la réservation ($idReservation) existe, false sinon
// estLeCreateur                 : teste si un utilisateur ($nomUser) est le créateur d'une réservation ($idReservation)
// etatReservation               : fournit l'état (confirmée ou provisoire) d'une réservation
// dateDebutReservation          : fournit la date de début d'une réservation
// confirmerReservation          : enregistre la confirmation de réservation dans la bdd
// annulerReservation            : enregistre l'annulation de réservation dans la bdd
// existeUtilisateur             : fournit true si l'utilisateur ($nomUser) existe, false sinon
// modifierMdpUser               : enregistre le nouveau mot de passe de l'utilisateur dans la bdd après l'avoir codé en MD5
// emailUtilisateur              : recherche et fournit l'adresse mail d'un utilisateur
// envoyerMdp                    : envoie un mail à l'utilisateur avec son nouveau mot de passe
// testerDigicodeSalle           : teste si le digicode saisi ($digicodeSaisi) correspond bien à une réservation
// testerDigicodeBatiment        : teste si le digicode saisi ($digicodeSaisi) correspond bien à une réservation de salle quelconque
// enregistrerUtilisateur        : enregistre l'utilisateur dans la bdd
// aPasseDesReservations         : recherche si l'utilisateur ($name) a passé des réservations à venir
// supprimerUtilisateur          : supprime l'utilisateur dans la bdd

// Ce fichier est destiné à être inclus dans les services web PHP du projet Réservations M2L
// 2 possibilités pour inclure ce fichier :
//     include_once ('_inc_fonctions_bdd_vouzetou.php');
//     require_once ('_inc_fonctions_bdd_vouzetou.php');

// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ces fonctions nécessitent d'inclure auparavant les fichiers _inc_connexion.php et _inc_parametres.php
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

global $cnx;
global $ADR_MAIL_EMETTEUR;
global $DELAI_DIGICODE;

// teste si $nomUser et $mdpUser identifient bien un utilisateur de niveau 1 (utilisateur) ou 2 (administrateur)
// renvoie "utilisateur" ou "administrateur" si authentification correcte, "inconnu" sinon
// modifié par Jim le 14/9/2014
function  estIdentifie ($nomUser, $mdpUser)
{	global $cnx;
	// préparation de la requete de recherche
	$req = "Select level from mrbs_users where name = '" . $nomUser . "' and password = '" . md5($mdpUser) . "' and level > 0";
	//echo  $req;		// on peut afficher le texte de la requete en mise au point, et le masquer ensuite !
	
	// extraction des données et comptage des réponses (0 ou une seule ligne de réponse)
	$jdd = mysql_query ($req , $cnx);
	$nbReponses = mysql_num_rows ($jdd);

	$reponse = "inconnu";
	if ($nbReponses > 0)
	{	$ligne = mysql_fetch_array ($jdd);
		$level = $ligne['level'];
		if ($level == "1") $reponse = "utilisateur";
		if ($level == "2") $reponse = "administrateur";	
	}
	// libère les ressources du jeu de données :
	mysql_free_result ($jdd);	
	
	return $reponse;
}

/*
// teste si $nomUser et $mdpUser identifient bien un utilisateur de niveau 1 (utilisateur) ou 2 (administrateur)
// renvoie true si authentification correcte, false sinon
// modifié par Jim le 2/9/2014
function  estUtilisateurIdentifie ($nomUser, $mdpUser)
{	global $cnx;
	// préparation de la requete de recherche
	$req = "Select name from mrbs_users where name = '" . $nomUser . "' and password = '" . md5($mdpUser) . "' and level > 0";
	//echo  $req;		// on peut afficher le texte de la requete en mise au point, et le masquer ensuite !
	
	// extraction des données et comptage des réponses
	$jdd = mysql_query ($req , $cnx);
	$nbReponses = mysql_num_rows ($jdd);
	// libère les ressources du jeu de données :
	mysql_free_result ($jdd);
	
	if ($nbReponses == 0)
		return false;
	else
		return true;
}

// teste si $nomUser et $mdpUser identifient bien un utilisateur de niveau 2 (administrateur)
// renvoie true si authentification correcte, false sinon
// modifié par Jim le 13/9/2014
function  estAdministrateurIdentifie ($nomUser, $mdpUser)
{	global $cnx;
	// préparation de la requete de recherche
	$req = "Select name from mrbs_users where name = '" . $nomUser . "' and password = '" . md5($mdpUser) . "' and level = 2";
	//echo  $req;		// on peut afficher le texte de la requete en mise au point, et le masquer ensuite !
	
	// extraction des données et comptage des réponses
	$jdd = mysql_query ($req , $cnx);
	$nbReponses = mysql_num_rows ($jdd);
	// libère les ressources du jeu de données :
	mysql_free_result ($jdd);
	
	if ($nbReponses == 0)
		return false;
	else
		return true;
}
*/

// génération aléatoire d'un digicode de 6 caractères hexadécimaux
// modifié par Jim le 7/9/2014
function genererUnDigicode()
{   $caracteresUtilisables = "0123456789ABCDEF";
	$digicode = "";
	// on ajoute 6 caractères
	for ($i = 1 ; $i <= 6 ; $i++)
	{   // on tire au hasard un caractère (position aléatoire entre 0 et le nombre de caractères - 1)
		$position = rand (0, strlen($caracteresUtilisables)-1);
		// on récupère le caracère correspondant à la position dans $caracteresUtilisables
		$unCaractere = substr ($caracteresUtilisables, $position, 1);
		// on ajoute ce caractère au digicode
		$digicode = $unCaractere;
	}
	return $digicode;
}

// mise à jour de la table mrbs_entry_digicode (si besoin) pour créer les digicodes manquants
// cette fonction peut dépanner en cas d'absence des triggers chargés de créer les digicodes
// modifié par Jim le 7/9/2014
function creerLesDigicodesManquants()
{	global $cnx;
	// préparation de la requete de recherche
	$req = "Select id from mrbs_entry where id not in (select id from mrbs_entry_digicode)";

	// extraction des données
	$jdd = mysql_query ($req , $cnx);
	// extrait une ligne du jeu de données :
	$uneLigne = mysql_fetch_array ($jdd);
	// tant qu'une ligne est trouvée :
	while ($uneLigne)
	{	// génération aléatoire d'un digicode de 6 caractères hexadécimaux
		$digicode = genererUnDigicode();
		$req = "insert into mrbs_entry_digicode (id, digicode) values (";
		$req = $req . $uneLigne["id"] . ", ";
		$req = $req . "'" . $digicode . "')";
		// echo $req;
		$ok = mysql_query ($req, $cnx);		
		
		// extrait la ligne suivante
		$uneLigne = mysql_fetch_array ($jdd);
	}
	return;
}

// fournit la liste des réservations à venir d'un utilisateur ($nomUser)
// le résultat est sous forme d'un jeu de données
// modifié par Jim le 4/9/2014
function listeReservations($nomUser)
{	global $cnx;
	// préparation de la requete de recherche
	$req = "Select mrbs_entry.id, timestamp, start_time, end_time, room_name, status, digicode";
	$req = $req . " from mrbs_entry, mrbs_room, mrbs_entry_digicode";
	$req = $req . " where mrbs_entry.room_id = mrbs_room.id";
	$req = $req . " and mrbs_entry.id = mrbs_entry_digicode.id";
	$req = $req . " and create_by = '" . $nomUser . "'";
	$req = $req . " and start_time > " . time();
	$req = $req . " order by start_time, room_name";
	// echo $req;
	
	// extraction des données
	$jdd = mysql_query ($req , $cnx);
	return $jdd;
}

// fournit true si la réservation ($idReservation) existe, false sinon
// modifié par ....................
function existeReservation($idReservation)
{	
}

// teste si un utilisateur ($nomUser) est le créateur d'une réservation ($idReservation)
// renvoie true si l'utilisateur est bien le créateur, false sinon
// modifié par ....................
function estLeCreateur($nomUser, $idReservation)
{	
}

// fournit l'état (confirmée ou provisoire) d'une réservation
// fournit la valeur 0 si confirmée, et la valeur 4 si provisoire
// modifié par ....................
function etatReservation($idReservation)
{	
}

// fournit la date de début d'une réservation
// fournit la date sous la forme UNIX (nombre de secondes écoulées depuis le 1/1/1970)
// modifié par ....................
function dateDebutReservation($idReservation)
{	
}

// enregistre la confirmation de réservation dans la bdd
// modifié par ....................
function confirmerReservation($idReservation)
{	
}

// enregistre l'annulation de réservation dans la bdd
// modifié par ....................
function annulerReservation($idReservation)
{	
}

// fournit true si l'utilisateur ($nomUser) existe, false sinon
// modifié par Jim le 3/9/2014
function existeUtilisateur($nomUser)
{	global $cnx;
	// préparation de la requete de recherche
	$req = "Select name from mrbs_users where name = '" . $nomUser . "'";
	//echo  $req;		// on peut afficher le texte de la requete en mise au point, et le masquer ensuite !
	
	// extraction des données et comptage des réponses
	$jdd = mysql_query ($req , $cnx);
	$nbReponses = mysql_num_rows ($jdd);
	// libère les ressources du jeu de données :
	mysql_free_result ($jdd);
	
	if ($nbReponses == 0)
		return false;
	else
		return true;
}

// enregistre le nouveau mot de passe de l'utilisateur dans la bdd après l'avoir codé en MD5
// modifié par ....................
function modifierMdpUser($nomUser, $nouveauMdp)
{	
}

// recherche et fournit l'adresse mail d'un utilisateur
// modifié par Jim le 4/2/2014
function emailUtilisateur($nomUser)
{	global $cnx;
	// recherche de l'adresse mail
	$req = "Select email from mrbs_users where name = '" . $nomUser . "'";
	$jdd = mysql_query ($req , $cnx)  or  die ( $req . '<br>' . mysql_error() );
	$ligne = mysql_fetch_array ($jdd);
	$adrMail = $ligne['email'];
	// libère les ressources du jeu de données :
	mysql_free_result ($jdd);
	return $adrMail;
}

// envoie un mail à l'utilisateur avec son nouveau mot de passe
// retourne true si envoi correct, false en cas de problème d'envoi
// modifié par ....................
function envoyerMdp($nomUser, $nouveauMdp)
{	
}

// teste si le digicode saisi ($digicodeSaisi) correspond bien à une réservation
// de la salle indiquée ($idSalle) pour l'heure courante
// fournit la valeur 0 si le digicode n'est pas bon, 1 si le digicode est bon
// modifié par Jim le 17/09/2014
function testerDigicodeSalle($idSalle, $digicodeSaisi)
{	global $cnx, $DELAI_DIGICODE;
	// préparation de la requete de recherche
	$req = "Select room_id, digicode";
	$req = $req . " from mrbs_entry, mrbs_entry_digicode";
	$req = $req . " where mrbs_entry.id = mrbs_entry_digicode.id";
	$req = $req . " and room_id = " . $idSalle;
	$req = $req . " and digicode = '" . $digicodeSaisi . "'";
	$req = $req . " and start_time - " . $DELAI_DIGICODE . " < " . time();
	$req = $req . " and end_time + " . $DELAI_DIGICODE . " > " . time();
	// echo $req;
	
	// extraction des données et comptage des réponses
	$jdd = mysql_query ($req , $cnx);
	$nbReponses = mysql_num_rows ($jdd);
	// libère les ressources du jeu de données :
	mysql_free_result ($jdd);
	
	if ($nbReponses = 0)
		return "0";
	else
		return "1";
}

// teste si le digicode saisi ($digicodeSaisi) correspond bien à une réservation de salle quelconque
// pour l'heure courante
// fournit la valeur 0 si le digicode n'est pas bon, 1 si le digicode est bon
// modifié par ....................
function testerDigicodeBatiment($digicodeSaisi)
{	
}

// enregistre l'utilisateur dans la bdd
// modifié par Jim le 13/9/2014
function enregistrerUtilisateur($name, $level, $password, $email)
{	global $cnx;
	// préparation de la requete
	$req = "insert into mrbs_users (level, name, password, email) values (";
	$req = $req . utf8_decode($level) . ", ";
	$req = $req . "'" . utf8_decode($name) . "', ";
	$req = $req . "'" . utf8_decode(md5($password)) . "', ";
	$req = $req . "'" . utf8_decode($email) . "')";
	// echo ($req);
	
	// exécution de la requete
	$ok = mysql_query ($req, $cnx);
	return $ok;
}

// recherche si un utilisateur a passé des réservations à venir
// modifié par ....................
function aPasseDesReservations($name)
{	
}

// supprime l'utilisateur dans la bdd
// modifié par ....................
function supprimerUtilisateur($name)
{	
}

// ATTENTION : ne pas enregistrer d'espaces après la balise de fin de script !!!!!!!!!!!!	
?>